home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / pascal / swag / mouse.swg / 0022_Good Mouse Support.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-08-24  |  5.7 KB  |  296 lines

  1.  
  2. Unit Mouse;
  3. { Copyright (c) 1991, Crazy Systems Software, Inc. }
  4.  
  5. {$G+}
  6.  
  7. {
  8.  *************************************************
  9.  *                                               *
  10.  *       Mouse in Text Mode Interface Unit       *
  11.  *            for Borland Pascal 7.0             *
  12.  *                                               *
  13.  *      Completely written by  Andrew Eigus      *
  14.  *************************************************
  15. }
  16.  
  17. interface
  18.  
  19. type
  20.   TMouseWinRect = record
  21.     X1, Y1, X2, Y2 : word
  22.   end;
  23.  
  24.   TMouseParamTable = record
  25.     BaudRate,  { Baud rate / 100 }
  26.     Emulation,
  27.     ReportRate, { Report rate }
  28.     FirmRev,
  29.     ZeroWord,  { Should be zero }
  30.     Port,  { Com Port used }
  31.     PhysButtons, { Physical buttons }
  32.     LogButtons : word { Logical buttons }
  33.   end;
  34.  
  35.   TMouseRec = record
  36.     Keys,
  37.     Hzints,
  38.     Page,
  39.     XCoord,
  40.     YCoord,
  41.     HSpeed,
  42.     VSpeed,
  43.     DSpeed : word;
  44.     Column,
  45.     Row : byte;
  46.     W : TMouseWinRect;
  47.     ButtonClicked : byte;
  48.     ParamTable : TMouseParamTable
  49.   end;
  50.  
  51. const
  52.   LeftButton  = 1;
  53.   MidButton   = 4;
  54.   RightButton = 2;
  55.  
  56.   mNoInts    = 0;
  57.   m30HzInts  = 1;
  58.   m50HzInts  = 2;
  59.   m100HzInts = 3;
  60.   m200HzInts = 4;
  61.  
  62. var
  63.   M : TMouseRec;
  64.   MouseInstalled : boolean;
  65.  
  66. function InstallMouse : boolean;
  67. function GetMouseInfo(var M : TMouseRec) : byte;
  68. function ButtonReleased : boolean;
  69. procedure SetMouseCursor(CursorOn : boolean);
  70. procedure SetMouseCursorType(HotSpotX, HotSpotY : word; var CursorImage);
  71. procedure MoveMouseTo(XCoord, YCoord : integer);
  72. procedure SetMouseWindow(X1, Y1, X2, Y2 : word);
  73. procedure GetMouseSpeed;
  74. procedure SetMouseSpeed(HorSpeed, VrtSpeed, DblSpeed : integer);
  75. procedure SetMouseInts(Hz : word);
  76. function GetMousePage : word;
  77. procedure SetMousePage(Page : word);
  78. procedure UninstallMouse;
  79.  
  80. implementation
  81.  
  82. Function InstallMouse; assembler;
  83. Asm
  84.   XOR AX,AX  { zero function }
  85.   INT 33h
  86.   CMP AL,0
  87.   JE  @@1
  88.   MOV MouseInstalled,True
  89.   LEA DI,M
  90.   MOV [ES:DI](TMouseRec).Keys,0
  91.   MOV [ES:DI](TMouseRec).Keys,BX
  92.   PUSH ES
  93.   PUSH DI
  94.   CALL GetMouseInfo
  95.   CALL GetMousePage
  96.   CALL GetMouseSpeed
  97.   MOV [ES:DI](TMouseRec).W.X1,1
  98.   MOV [ES:DI](TMouseRec).W.Y1,1
  99.   MOV [ES:DI](TMouseRec).W.X2,639
  100.   MOV [ES:DI](TMouseRec).W.Y2,199
  101.   MOV AX,246Ch
  102.   LEA DX,M.ParamTable
  103.   INT 33h
  104.   MOV AL,True
  105. @@1:
  106. End; { InstallMouse }
  107.  
  108. Function GetMouseInfo; assembler;
  109. Asm
  110.   CMP MouseInstalled,True
  111.   JNE @@1
  112.   MOV AX,0003h
  113.   INT 33h
  114.   LES DI,M
  115.   MOV [ES:DI](TMouseRec).XCoord,CX
  116.   SHR CX,3
  117.   INC CL
  118.   MOV [ES:DI](TMouseRec).Column,CL
  119.   MOV [ES:DI](TMouseRec).YCoord,DX
  120.   SHR DX,3
  121.   INC DL
  122.   MOV [ES:DI](TMouseRec).Row,DL
  123.   MOV [ES:DI](TMouseRec).ButtonClicked,BL
  124.   MOV AL,BL   { LeftButton, MidButton or RightButton }
  125. @@1:
  126. End; { GetMouseInfo }
  127.  
  128. Function ButtonReleased; assembler;
  129. Asm
  130.   LEA DI,M
  131.   PUSH ES
  132.   PUSH DI
  133.   CALL GetMouseInfo
  134.   MOV AL,True
  135.   CMP BL,0
  136.   JE  @@1
  137.   MOV AL,False
  138. @@1:
  139. End; { ButtonReleased }
  140.  
  141. Procedure SetMouseCursor; assembler;
  142. Asm
  143.   CMP MouseInstalled,True
  144.   JNE @@2
  145.   MOV AX,0001h
  146.   CMP CursorOn,True
  147.   JE  @@1
  148.   MOV AX,0002h
  149. @@1:
  150.   INT 33h
  151. @@2:
  152. End; { SetMouseCursor }
  153.  
  154. Procedure SetMouseCursorType; assembler;
  155. Asm
  156.   CMP MouseInstalled,True
  157.   JNE @@1
  158.   MOV AX,000Ah
  159.   MOV BX,HotSpotX
  160.   MOV CX,HotSpotY
  161.   LES DX,CursorImage
  162.   INT 33h
  163. @@1:
  164. End; { SetMouseCursorType }
  165.  
  166. Procedure MoveMouseTo; assembler;
  167. Asm
  168.   CMP MouseInstalled,True
  169.   JNE @@1
  170.   MOV AX,0004h
  171.   MOV CX,XCoord
  172.   MOV DX,YCoord
  173.   INT 33h
  174. @@1:
  175. End; { MoveMouseTo }
  176.  
  177. Procedure SetMouseWindow; assembler;
  178. Asm
  179.   CMP MouseInstalled,True
  180.   JNE @@1
  181.   LEA DI,M
  182.   MOV AX,0007h
  183.   MOV CX,X1
  184.   MOV [ES:DI](TMouseRec).W.X1,CX
  185.   MOV DX,X2
  186.   MOV [ES:DI](TMouseRec).W.X2,DX
  187.   INT 33h
  188.   MOV AX,0008h
  189.   MOV CX,Y1
  190.   MOV [ES:DI](TMouseRec).W.Y1,CX
  191.   MOV DX,Y2
  192.   MOV [ES:DI](TMouseRec).W.Y2,DX
  193.   INT 33h
  194. @@1:
  195. End; { SetMouseWindow }
  196.  
  197. Procedure GetMouseSpeed; assembler;
  198. Asm
  199.   CMP MouseInstalled,True
  200.   JNE @@1
  201.   MOV AX,001Bh
  202.   INT 33h
  203.   LEA DI,M
  204.   MOV [ES:DI](TMouseRec).HSpeed,BX
  205.   MOV [ES:DI](TMouseRec).VSpeed,CX
  206.   MOV [ES:DI](TMouseRec).DSpeed,DX
  207. @@1:
  208. End; { GetMouseSpeed }
  209.  
  210. Procedure SetMouseSpeed; assembler;
  211. Asm
  212.   CMP MouseInstalled,True
  213.   JNE @@1
  214.   MOV AX,001Ah
  215.   MOV BX,HorSpeed
  216.   MOV CX,VrtSpeed
  217.   MOV DX,DblSpeed
  218.   INT 33h
  219.   CALL GetMouseSpeed
  220. @@1:
  221. End; { SetMouseSpeed }
  222.  
  223. Procedure SetMouseInts; assembler;
  224. Asm
  225.   CMP MouseInstalled,True
  226.   JNE @@1
  227.   MOV AX,001Ch
  228.   MOV BX,Hz
  229.   INT 33h
  230. @@1:
  231. End; { SetMouseInts }
  232.  
  233. Function GetMousePage; assembler;
  234. Asm
  235.   CMP MouseInstalled,True
  236.   JNE @@1
  237.   MOV AX,001Eh
  238.   INT 33h
  239.   LEA DI,M
  240.   MOV [ES:DI](TMouseRec).Page,BX
  241.   MOV AX,BX
  242. @@1:
  243. End; { GetMousePage }
  244.  
  245. Procedure SetMousePage; assembler;
  246. Asm
  247.   CMP MouseInstalled,True
  248.   JNE @@1
  249.   MOV AX,001D
  250.   MOV BX,Page
  251.   INT 33h
  252.   CALL GetMousePage
  253. @@1:
  254. End; { SetMousePage }
  255.  
  256. Procedure UninstallMouse; assembler;
  257. Asm
  258.   CMP MouseInstalled,True
  259.   JNE @@1
  260.   MOV AX,0020h
  261.   INT 33h
  262. @@1:
  263. End; { UninstallMouse }
  264.  
  265. Begin
  266.   MouseInstalled := False;
  267.   FillChar(M, SizeOf(TMouseRec), 0)
  268. End. { Mouse }
  269.  
  270. {---now the demo program---}
  271.  
  272. Program MouDemo;
  273.  
  274. uses Crt, Mouse;
  275.  
  276. Begin
  277.   if InstallMouse then
  278.   begin
  279.     ClrScr;
  280.     SetMouseCursor(True);
  281.     WriteLn('Mouse is installed.');
  282.     WriteLn('Click left mouse button in the upper left corner of your ' +
  283.       'screen to quit.');
  284.     repeat
  285.       GetMouseInfo(M);
  286.     until (M.ButtonClicked = LeftButton) and (M.Column = 1) and (M.Row = 1);
  287.     Write('Waiting to release left button...');
  288.     repeat until ButtonReleased;
  289.     Write(#13);
  290.     ClrEol;
  291.     SetMouseCursor(False);
  292.     UninstallMouse
  293.   end else WriteLn('Mouse is NOT installed.')
  294. End.
  295.  
  296.